/**
 * @fileOverview Castle游戏实例中的钩子类Hook源代码
 * @author <a href="http://sivory.my.phpcloud.com">Sivory</a>
 * @version 0.0.1
 */

(function() {

	/** @exports _Class as Name.Sivory.Castle.Core.Debug */
	var _Class =

	/**
	 * @class Castle游戏实例中的钩子类。它本质上是一个函数队列，不过此队列中的函数仅会被执行一遍，执行一遍后队列将被清空。
	 * @author <a href="http://sivory.my.phpcloud.com">Sivory</a>
	 * @version 0.0.1
	 */
	Name.Sivory.Castle.Util.Hook = function() {

			/**
			 * @private
			 * @field
			 * @type Array
			 * @description 记录函数用的队列
			 * @since 0.0.1
			 */
			this.funcList = [];
		};

	/**
	 * @public
	 * @function
	 * @description 向钩子中添加函数
	 * @param {Function} func 将在钩子中被执行的函数
	 * @since 0.0.1
	 */
	_Class.prototype.add = function(func) {
		this.funcList.push(func);
	};

	/**
	 * @public
	 * @function
	 * @description 执行钩子中的函数，此操作是一次性的，运行后所有函数将被删除。
	 * @since 0.0.1
	 */
	_Class.prototype.run = function() {
		//遍历队列并调用其中函数
		for(var i = 0; i < this.funcList.length; i++) {
			var func = this.funcList[i];
			func();
		}
		//清空队列
		this.funcList.splice(0);
	};

})();